未来行程路线规划 最后更新时间: 2021年01月22日
自地图 SDK 搜索功能 6.9.0 版本起新增未来行程路线规划,简称ETD。 未来出行规划(ETD)服务已覆盖全国所有城市,可提供未来7天的出行路线规划。
注意:下面介绍的功能使用的是地图SDK的搜索功能,需要在工程中导入【搜索功能库(AMapSearchKit.framework)】。
第一步,引入头文件
引入 AMapFoundationKit.h 和 AMapSearchKit.h 这两个头文件。
#import <AMapFoundationKit/AMapFoundationKit.h>
#import <AMapSearchKit/AMapSearchKit.h>
//在桥接文件中引入头文件
#import <AMapFoundationKit/AMapFoundationKit.h>
#import <AMapSearchKit/AMapSearchKit.h>
第二步,配置KEY
在使用搜索功能时,需要添加 Key。
[AMapServices sharedServices].apiKey = @"您的key";
AMapServices.shared().apiKey = "您的Key"
第三步, 定义 AMapSearchAPI
定义主搜索对象 AMapSearchAPI ,并继承搜索协议<AMapSearchDelegate>。
第四步,构造 AMapSearchAPI
构造主搜索对象 AMapSearchAPI,并设置代理。
self.search = [[AMapSearchAPI alloc] init];
self.search.delegate = self;
search = AMapSearchAPI()
search.delegate = self
第五步,设置未来行程规划参数
请求参数类为 AMapDrivingRouteSearchRequest,其中:
| 
 参数名  | 
 含义  | 
 是否必填  | 
|---|---|---|
| 
 origin  | 
 出发点坐标  | 
 必填  | 
| 
 destination  | 
 目的点坐标  | 
 必填  | 
| 
 beginTime  | 
 出发时间  | 
 必填  | 
| 
 interval  | 
 时间间隔  | 
 必填  | 
| 
 timeCount  | 
 时间点个数,最多48个  | 
 必填  | 
| 
 originId  | 
 出发点POIID  | 
 否  | 
| 
 destinationId  | 
 目的点POIID  | 
 否  | 
| 
 origintype  | 
 出发点POI类型编码  | 
 否  | 
| 
 destinationtype  | 
 目的点点POI类型编码  | 
 否  | 
| 
 parentId  | 
 目的点的父POIID  | 
 否  | 
| 
 plateProvince  | 
 车牌省份,用汉字填入车牌省份缩写。用于判断是否限行。  | 
 否  | 
| 
 plateNumber  | 
 车牌详情,填入除省份及标点之外的字母和数字(需大写)。用于判断是否限行。  | 
 否  | 
| 
 cartype  | 
 驾车路径规划车辆类型  | 
 否  | 
| 
 strategy  | 
 路径规划的策略,可选,默认为0-速度优先;详细策略请见[下方ETD驾车策略说明]  | 
 否  | 
 self.startAnnotation.coordinate = self.startCoordinate;
    self.destinationAnnotation.coordinate = self.destinationCoordinate;
    
    AMapFutureRouteSearchRequest *navi = [[AMapFutureRouteSearchRequest alloc] init];
    /* 出发点. */
    navi.origin = [AMapGeoPoint locationWithLatitude:self.startCoordinate.latitude
                                           longitude:self.startCoordinate.longitude];
    /* 目的地. */
    navi.destination = [AMapGeoPoint locationWithLatitude:self.destinationCoordinate.latitude
                                                longitude:self.destinationCoordinate.longitude];
    NSTimeInterval startTime = [[NSDate dateWithTimeIntervalSinceNow:3600] timeIntervalSince1970];
    NSString *timeString = [NSString stringWithFormat:@"%0.f", startTime];
    navi.beginTime = timeString;//出发时间设置为当前时间之后一个小时
    navi.interval = 900;//时间间隔为15分钟
    navi.timeCount = 10;
request.origin = AMapGeoPoint.location(withLatitude: CGFloat(startCoordinate.latitude), longitude: CGFloat(startCoordinate.longitude))
    request.destination = AMapGeoPoint.location(withLatitude: CGFloat(destinationCoordinate.latitude), longitude: CGFloat(destinationCoordinate.longitude))
    let request = AMapFutureRouteSearchRequest()
        
    let nowTime = Date().timeIntervalSince1970
    var timeStamp = Int(nowTime!)
    timeStamp += 3600;
    let timeStr = String(timeStamp)
    request.beginTime = timeStr
    request.interval = 900
    request.timeCount = 10
第六步,发起未来行程路线规划
调用 AMapSearchAPI 的 AMapFutureRouteSearch 并发起未来行程路线规划。
[self.search AMapFutureRouteSearch:navi];
search.aMapFutureRouteSearch(request)
第七步,在回调中处理数据
当检索成功时,会进到 onFutureRouteSearchDone 回调函数中,在该回调中,通过解析 AMapFutureRouteSearchResponse 获取将未来行程规划路线的数据显示在地图上。
- (void)onFutureRouteSearchDone:(AMapRouteSearchBaseRequest *)request response:(AMapFutureRouteSearchResponse *)response
{
    if (!response.paths.count || !response.timeInfos.count) {
        return;
    }
    //解析response获取路径信息,具体解析见 Demo
}
func onFutureRouteSearchDone(_ request: AMapRouteSearchBaseRequest!, response: AMapFutureRouteSearchResponse!) {
        
    if response.paths.count == 0 || response.timeInfos.count == 0 {
            return
    }
    //解析response获取路径信息,具体解析见 Demo
}
ETD驾车策略说明
| 
 策略ID  | 
 策略说明  | 
|---|---|
| 
 1  | 
 返回的结果考虑路况,尽量躲避拥堵而规划路径,与高德地图的“躲避拥堵”策略一致  | 
| 
 2  | 
 返回的结果不走高速,与高德地图“不走高速”策略一致  | 
| 
 3  | 
 返回的结果尽可能规划收费较低甚至免费的路径,与高德地图“避免收费”策略一致  | 
| 
 4  | 
 返回的结果考虑路况,尽量躲避拥堵而规划路径,并且不走高速,与高德地图的“躲避拥堵&不走高速”策略一致  | 
| 
 5  | 
 返回的结果尽量不走高速,并且尽量规划收费较低甚至免费的路径结果,与高德地图的“避免收费&不走高速”策略一致  | 
| 
 6  | 
 返回路径规划结果会尽量的躲避拥堵,并且规划收费较低甚至免费的路径结果,与高德地图的“躲避拥堵&避免收费”策略一致  | 
| 
 7  | 
 返回的结果尽量躲避拥堵,规划收费较低甚至免费的路径结果,并且尽量不走高速路,与高德地图的“避免拥堵&避免收费&不走高速”策略一致  | 
| 
 8  | 
 返回的结果会优先选择高速路,与高德地图的“高速优先”策略一致  | 
| 
 9  | 
 返回的结果会优先考虑高速路,并且会考虑路况躲避拥堵,与高德地图的“躲避拥堵&高速优先”策略一致  | 
| 
 10  | 
 不考虑路况,返回速度最优、耗时最短的路线,但是此路线不一定距离最短  | 
| 
 11  | 
 避让拥堵&速度优先&避免收费  | 
失败说明
当检索失败时,会进入 didFailWithError 回调函数,通过该回调函数获取产生的失败的原因。
- (void)AMapSearchRequest:(id)request didFailWithError:(NSError *)error
{
    NSLog(@"Error: %@", error);
}
func aMapSearchRequest(_ request: Any!, didFailWithError error: Error!) {
    print("Error:\(error)")
}